2011-07-13 66 views
2

我努力嘗試開發允許來自混合命名空間的屬性的模式。定義允許來自混合命名空間的屬性的模式

這裏是xxx_schema2.xsd:

<?xml version="1.0" encoding="UTF-8"?> 
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    elementFormDefault="qualified" 
    attributeFormDefault="qualified" 
    targetNamespace="http://www.mrbouffant.com/schema2" 
    xmlns:xxx="http://www.mrbouffant.com/schema2"> 

    <xs:attributeGroup name="schema2AttributeGroup"> 
    <xs:attribute name="schema2Attribute1 " type="xs:string"/> 
    <xs:attribute name="schema2Attribute2 " type="xs:string"/> 
    </xs:attributeGroup> 

</xs:schema> 

這裏是xxx_schema1.xsd其中進口xxx_schema2:

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
elementFormDefault="qualified" 
xmlns:xxx="http://www.mrbouffant.com/schema2"> 

    <xs:import namespace="http://www.mrbouffant.com/schema2" schemaLocation="xxx_schema2.xsd"/> 

    <!-- ROOT ELEMENT --> 
    <xs:element name="rootElement" type="rootElementType" /> 

    <!-- COMPLEX TYPES --> 
    <xs:complexType name="rootElementType"> 
    <xs:simpleContent> 
     <xs:extension base="xs:string"> 
      <xs:attributeGroup ref="xxx:schema2AttributeGroup"/> 
      <xs:attribute name="schema1Attribute1" type="xs:string"/> 
     </xs:extension> 
    </xs:simpleContent> 
    </xs:complexType> 
</xs:schema> 

這裏是我想驗證對xxx_schema1.xsd XML文檔:

<?xml version="1.0" encoding="UTF-8"?> 
    <rootElement xmlns:xxx='http://www.mrbouffant.com/schema2/' 
schema1Attribute1="foo" 
xxx:schema2Attribute1="bar" 
xxx:schema2Attribute2="far" /> 

當Saxon-EE解析器試圖驗證XML文檔Ë模式,它產生的錯誤是從字面上:

Engine name: Saxon-EE 9.3.0.5 
Severity: error 
Description: Attribute @xxx:schema2Attribute1 is not allowed on element <rootElement> 
(it would be allowed in namespace http://www.mrbouffant.com/schema2) 

Engine name: Saxon-EE 9.3.0.5 
Severity: error 
Description: Attribute @xxx:schema2Attribute2 is not allowed on element <rootElement> 
(it would be allowed in namespace http://www.mrbouffant.com/schema2) 

請你能幫助我理解我在防止驗證被成功我的架構定義或XML文檔做錯了?謝謝。

+0

是的,這是可能的。目前還不清楚你在問什麼。你試過了嗎?如果它不起作用,會發生什麼? – skaffman

+0

我被告知「屬性@xxx:schema2Attribute1不允許在元素(它將被允許在名稱空間<模式2的名稱空間中使用)」 根據我所要求的內容..我想知道通常如何構建schema2,schema1和XML文檔才能正確驗證它。 謝謝! – mrbouffant

+0

如果你向我們展示了你正在談論的實際模式片段,並加上完整的錯誤,而不是用英文描述它們,這將有所幫助。 – skaffman

回答

2

實例XML中的http://www.mrbouffant.com/schema2的名稱空間聲明具有尾部斜槓並且與您的Schema的聲明名稱空間不匹配。

刪除尾隨斜線和它驗證就好:

<?xml version="1.0" encoding="UTF-8"?> 
    <rootElement xmlns:xxx='http://www.mrbouffant.com/schema2' 
schema1Attribute1="foo" 
xxx:schema2Attribute1="bar" 
xxx:schema2Attribute2="far" />