2016-05-31 32 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