2016-05-31 31 views
1

的XML:XSD <any/>不同的结果marklogic

<?xml version="1.0"?> 
<note 
xmlns="http://www.w3schools.com" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <to>Tove</to> 
    <from>Jani</from> 
    <heading>Reminder</heading> 
    <body xml:lang="en"><div></div></body> 
</note> 

的XSD:

<?xml version="1.0"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
targetNamespace="http://www.w3schools.com" 
xmlns="http://www.w3schools.com" 
elementFormDefault="qualified"> 
    <xs:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="http://www.w3.org/2001/xml.xsd"> 
    </xs:import> 
    <xs:element name="note"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element name="to" type="xs:string"/> 
       <xs:element name="from" type="xs:string"/> 
       <xs:element name="heading" type="xs:string"/> 
       <xs:element name="body"> 
        <xs:complexType mixed="true"> 
         <xs:complexContent> 
          <xs:extension base="someType"> 
           <xs:attribute ref="xml:lang" use="required"> 
           </xs:attribute> 
          </xs:extension> 
         </xs:complexContent> 
        </xs:complexType> 
       </xs:element> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 

    <xs:complexType name="someType" mixed="true"> 
     <xs:sequence> 
      <xs:any maxOccurs="unbounded" minOccurs="1" processContents="skip"/> 
     </xs:sequence> 
    </xs:complexType> 

</xs:schema> 

经过this和它的作品。 但是,这并不在Marklogic工作,错误的是:

XDMP-VALIDATEMISSINGELT: (err:XQDY0027) validate lax { $node } -- Missing required elements: Expected ((any(skip,!())+),(any(skip,!())+)) at fn:doc("d:/xml.xml")/*:note/*:body using schema "/schemas/xsd.xsd" 

我的目的是让HTML内容的体内强制性的发生是这样的:

<body xml:lang="en"><div></div></body> 

回答

1

似乎MarkLogic模式解析中存在一个错误,其中complexType标记为“混合”并且还具有扩展名。

由于第一个'混合'是多余的,如果你正在扩展另一个混合的类型,那么这一切都会按照你的预期工作。

所以,你应该尝试使用模式:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.w3schools.com" xmlns="http://www.w3schools.com" elementFormDefault="qualified"> 
    <xs:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="http://www.w3.org/2001/xml.xsd"> 
    </xs:import> 
    <xs:element name="note"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="to" type="xs:string"/> 
     <xs:element name="from" type="xs:string"/> 
     <xs:element name="heading" type="xs:string"/> 
     <xs:element name="body"> 
      <xs:complexType> 
      <xs:complexContent> 
       <xs:extension base="someType"> 
       <xs:attribute ref="xml:lang" use="required"> 
       </xs:attribute> 
       </xs:extension> 
      </xs:complexContent> 
      </xs:complexType> 
     </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
    <xs:complexType name="someType" mixed="true"> 
    <xs:sequence> 
     <xs:any maxOccurs="unbounded" minOccurs="1" processContents="skip"/> 
    </xs:sequence> 
    </xs:complexType> 
</xs:schema> 
0

更深的挖掘之前,我只是想澄清一些事情 - 你的模式在哪里?

MarkLogic希望模式存在于特定内容数据库配置中引用的模式数据库中。这默认为Schema数据库。

你有没有包括引用的所有Scemas

看看这里的细节,包括为其MarkLogic解决模式的顺序和位置(通过XML或XSD到架构的数据库?):https://docs.marklogic.com/guide/admin/schemas

最后,当开始探索MarkLogic中的模式使用,请注意,当您更改模式时重新启动MarkLogic将是一个好主意。从技术上讲,您不需要重新启动,但只需清除一些缓存,但如果可以重新启动,那么这会让您更快地停留在学习曲线上并保持一点点。

+0

是我的XSD是架构数据库。我需要在

some_text
以上代码中添加模式检查,这些检查与上述代码中的相同,但在Marklogic中失败,表示错误XDMP-VALIDATEMISSINGELT:(err: XQDY0027)validate lax {$ node} - 缺少必需的元素:Expected(any(skip,!())*,any(skip,!())+)。 – Ranvir

+0

我已经编辑了精确信息的问题,只需检查这个免费格式化与验证的例子,但是当我加载到marklogic,它不起作用。 - > xquery版本“1.0-ml”; 设$节点:= xdmp:文档获取( “d:/xml.xml”) 回报 尝试{xdmp:文档插入( “myxml/xml.xml”,验证不严{$节点})} catch($ e){“验证失败:”, $ e/error:format-string/text()} – Ranvir