在本主題中,我想要求比我自己提供的更多的腦細胞。我想根據實際XML實例中使用/未使用的元素(僅限單個命名空間)重構我的XSD(v1.0)。讓我們建立了一個小場景:報告相應模式的所有未使用元素(+屬性)
我對相應的模式只有有效的XML文檔:
<body>
<h1>Heading 1</h1>
<p>paragraph</p>
<p><bold>bold</bold>paragraph<italic>italic</italic></p>
</body>
XSD來驗證:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:element name="body">
<xs:complexType>
<xs:choice maxOccurs="unbounded">
<xs:element ref="h1"/>
<xs:element ref="h2"/>
<xs:element ref="p"/>
<xs:element ref="span"/>
</xs:choice>
</xs:complexType>
</xs:element>
<xs:element name="h1" type="xs:string"/>
<xs:element name="h2" type="xs:string"/>
<xs:element name="p">
<xs:complexType mixed="true">
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="bold"/>
<xs:element ref="italic"/>
<xs:element ref="underline"/>
</xs:choice>
</xs:complexType>
</xs:element>
<xs:element name="span">
<xs:complexType mixed="true">
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="bold"/>
<xs:element ref="italic"/>
<xs:element ref="underline"/>
</xs:choice>
</xs:complexType>
</xs:element>
<xs:element name="bold" type="xs:NCName"/>
<xs:element name="italic" type="xs:NCName"/>
<xs:element name="underline" type="xs:NCName"/>
</xs:schema>
在此基礎上,我會喜歡在我的XML實例中使用關於哪些元素(標記+屬性)爲NOT來創建報告(通過XSLT [2.0,3.0,通過SAXON EE 9.6.0.5提供])b ut可能在我的XSD中。
簡化僞待辦事項/從頭開始:
- 搜索所有
//xs:element[@name]
在我的XSD(屬性在報告V2.0跟隨)。 - 搜索我的XML
- 所有
*
「比較」 是
問題:
有什麼超出了我的視野有關此主題的可愛的XSLT社會了嗎?
如何以良好的方式進行存儲和比較?
通過XSLT 3.0使用xsl:map
?存儲路徑[/body/h1
,/body/p
]並比較這些路徑? (技巧:走出架構的正確路徑,處理的定義所有的方法,像xs:group ref="..."
或通過complexTypes
等)
[附加元件:也許我必須將它延伸到我的XML祖先元素的背景。在這個例子中的情況下,我可能要 區分//p/underline
和//span/underline
之間。]
<xsl:message>please write your thoughts open minded. I don't request for fully functional code!</xsl:message>
感謝迄今爲止,爲凱博士添加了標籤。 – uL1