我已经给出了
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema
targetNamespace="AdditionalAttribute.OtherXSD"
xmlns:o="AdditionalAttribute.OtherXSD"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
>
<xs:element name="Tag" type="o:TagType" />
<xs:complexType name="TagType" />
</xs:schema>
我想写
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema
targetNamespace="AdditionalAttribute.MyXSD"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
>
<!-- ? -->
</xs:schema>
所以这就变成了有效的XML:
<?xml version="1.0" encoding="UTF-8"?>
<o:Tag
xmlns:o="AdditionalAttribute.OtherXSD"
xmlns:m="AdditionalAttribute.MyXSD"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
AdditionalAttribute.OtherXSD AdditionalAttribute.OtherXSD.xsd
AdditionalAttribute.MyXSD AdditionalAttribute.MyXSD.xsd
"
m:AdditionalAttribute="Value"
/>
我知道另一个XSD中的similar question, that asks how to place an additional attribute to all complex types。答案是否定的。但是,我不是这方面的专家,从那里的答案我不能解释,如果有可能特定的复杂类型。我尝试了几件事没有成功,似乎这只能通过xsd:extension'ing或xsd:限制一个复杂的类型来实现,从而得到一个新的,这不是我想要的。我想在同一个标签上“合并”属性:
<o:Tag o:...=... />
+ <o:Tag m:...=... />
= <o:Tag o:...=... m:...=... />
这可能吗?如何?
答案 0 :(得分:0)
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:o="AdditionalAttribute.OtherXSD" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:m="AdditionalAttribute.MyXSD" attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="AdditionalAttribute.OtherXSD" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:import namespace="AdditionalAttribute.MyXSD" />
<xs:element name="Tag">
<xs:complexType>
<xs:attribute ref="m:AdditionalAttribute" use="required" />
</xs:complexType>
</xs:element>
</xs:schema>
答案 1 :(得分:0)
我认为你的问题是你正试图在XML Schema中一些刻意施加的约束之外进行操作。
您提议的内容会为“标记”添加新属性。因此改变了 XSD模型的某些消费者的类型。
话虽如此,只要您愿意在XML中添加xsi:type属性,就可以按照自己的意愿行事。鉴于o:TagType是一个空类型,你也可以这样做:
<m:Tag xsi:type="m:TagWithAttribute" m:additionalAttribute="Value" />
通过添加xsi:type属性,架构验证器可以区分您对&#39; Tag&#39;的使用情况。从那些希望以不同方式进行验证的人的那个。换句话说,XML Schema强制执行强类型(xs:重新定义了强类型,这就是为什么有些人不喜欢它)。