我希望能够像这样创建xml:
<Restaurant>
<Property Name="Bar" Value="true" Type="boolean"/>
<Property Name="Grill" Value="true" Type="boolean"/>
<Property Name="Capacity" Value="120" Type="integer"/>
<Property Name="Size" Value="200.5" Type="decimal" Unit="square meter"/>
</Restaurant>
所以我创建了像这样的xsd:
<xs:complexType name="Restaurant">
<xs:element name="Property" type="Property" minOccurs="0" maxOccurs="unbounded"/>
</xs:element>
<xs:complexType name="Property">
<xs:attribute name="Name" type="xs:string" use="required"/>
<xs:attribute name="Value" type="xs:anySimpleType" use="required"/>
<xs:attribute name="Type" type="xs:string" use="required"/>
<xs:attribute name="Unit" type="xs:string" use="optional"/>
</xs:complexType>
如何定义属性“Type”只能来自架构内置数据类型?我不想用所有可能的类型创建自己的枚举。 通过这个我想实现没有人能够写:
<Property Name="Capacity" Value="120" Type="myOwnIntType"/>
答案 0 :(得分:1)
您想要设计的XML类型是XSD几乎不受阻碍的设计。事实上,我看到人们使用像
这样的结构的主要原因 <Property Name="Bar" Value="true" Type="boolean"/>
而不是
<Bar>true</Bar>
他们希望结构的描述成为数据的一部分而不是单独的模式:两者似乎都有点过分。
所以,你不能用XSD 1.0做到这一点。但是,XSD 1.1对那些想要以XSD方式设计XML的人更容忍,并为这种用例引入了“条件类型赋值”的构造:元素的类型可以依赖于其中一个属性的值。目前有两种XSD 1.1,Saxon和Xerces的实现。
答案 1 :(得分:0)
Afaik没有这样的枚举,在“Meta-XSD”(描述XSD的XSD文件)中,他们使用“xs:QName”作为类型。你试过吗?