1
我正在玩一些XSD文件中嵌入的schematron規則。這個例子是規範的例子之一,它在沒有名稱空間的情況下工作,但是當我引入一個名稱空間時,它會停止驗證,我無法弄清楚爲什麼。嵌入式schematron不能在具有命名空間的XML文檔中工作
的模式很簡單:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://me.com/ns" xmlns:q="http://me.com/ns">
<xs:element name="socket">
<xs:annotation>
<xs:appinfo>
<sch:pattern name="Mutually exclusive attributes on the socket element"
xmlns:sch="http://purl.oclc.org/dsdl/schematron">
<sch:rule context="socket" >
<sch:assert test="@hostName and @hostAddress">On a socket element only one
of the attributes hostName and hostAddress are allowed, not
both.</sch:assert>
</sch:rule>
</sch:pattern>
</xs:appinfo>
</xs:annotation>
<xs:complexType>
<xs:attribute name="hostName" type="xs:string" use="optional"/>
<xs:attribute name="hostAddress" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
</xs:schema>
和被確認的文檔是:當被刪除的命名空間
<?xml version="1.0" encoding="UTF-8"?>
<socket xmlns="http://me.com/ns" hostAddress="192.168.200.76"/>
的Schematron的斷言解僱,但如上圖所示,他們不這樣做。我嘗試在上下文中引用命名空間<sch:rule context="q:socket">
,但是隨後出現了schematron管道的編譯錯誤。
有沒有人知道他們的頭頂如何解決這個問題?
我將scheme元素更改爲',但是assert仍然無法觸發。 –
2013-05-02 16:15:38
Aha,工作,但我不得不限定屬性''。謝謝:) –
2013-05-03 06:28:30
我已經嘗試了註釋的XSD和提供的XML,如圖所示,它們按所述方式工作。按照模式,這些屬性不需要限定,所以你必須嘗試過別的。 – 2013-05-03 10:54:56