在XML Schema 1.0中是否有替代方法
发布时间:2020-12-16 23:29:16 所属栏目:百科 来源:网络整理
导读:我在下面有一个XSD文档片段.当 XML文件验证此模式时,我希望确保mm:Depot和mm:Customer / mm:County中的值相同并且仅限于Location类型中的项目. 这可以使用 assert在XML Schema 1.1中完成.标签,但我必须验证XML Schema 1.0.是否有一些巧妙的技巧使这项工作
我在下面有一个XSD文档片段.当
XML文件验证此模式时,我希望确保mm:Depot和mm:Customer / mm:County中的值相同并且仅限于Location类型中的项目.
这可以使用< assert>在XML Schema 1.1中完成.标签,但我必须验证XML Schema 1.0.是否有一些巧妙的技巧使这项工作在1.0? <xsd:element name="DeliveryOrder" type="OrderDetails" /> <xsd:complexType name="OrderDetails"> <xsd:sequence> <xsd:element name="Depot" type="mm:Location" /> <xsd:element name="Customer" type="mm:Customer" maxOccurs="1" minOccurs="1" /> </xsd:sequence> </xsd:complexType> <xsd:simpleType name="Location"> <xsd:restriction base="xsd:string"> <xsd:enumeration value="OverHere" /> <xsd:enumeration value="OverThere" /> </xsd:restriction> </xsd:simpleType> <xsd:complexType name="Customer"> <xsd:sequence> <xsd:element name="firstname" type="string" /> <xsd:element name="surname" type="string" /> <xsd:element name="County" type="mm:Location" /> </xsd:sequence> </xsd:complexType> 我想要实现的是这样的…… <?xml version="1.0" encoding="UTF-8"?> <mm:DeliveryOrder xmlns:mm="http://myNamespace/DeliveryOrderSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://myNamespace/DeliveryOrderSchema DeliveryOrder.xsd "> <mm:Depot>OverThere</mm:Depot> <mm:Customer> <mm:firstname>Jane</mm:firstname> <mm:surname>Doe</mm:surname> <mm:County>OverThere</mm:County> </mm:Customer> </mm:DeliveryOrder> 请注意OverThere值出现两次. 解决方法
您可以使用“参照完整性”.
<?xml version="1.0" encoding="utf-8" ?> <!-- XML Schema generated by QTAssistant/XSD Module (http://www.paschidev.com) --> <xsd:schema targetNamespace="http://myNamespace/DeliveryOrderSchema" xmlns="http://myNamespace/DeliveryOrderSchema" xmlns:mm="http://myNamespace/DeliveryOrderSchema" elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:element name="DeliveryOrder" type="OrderDetails"> <xsd:key name="LocationDepot"> <xsd:selector xpath="mm:Depot"/> <xsd:field xpath="."/> </xsd:key> <xsd:keyref refer="LocationDepot" name="CustomerLocation"> <xsd:selector xpath="mm:Customer"/> <xsd:field xpath="mm:County"/> </xsd:keyref> </xsd:element> <xsd:complexType name="OrderDetails"> <xsd:sequence> <xsd:element name="Depot" type="Location"/> <xsd:element name="Customer" type="Customer" maxOccurs="1" minOccurs="1"/> </xsd:sequence> </xsd:complexType> <xsd:simpleType name="Location"> <xsd:restriction base="xsd:string"> <xsd:enumeration value="OverHere"/> <xsd:enumeration value="OverThere"/> </xsd:restriction> </xsd:simpleType> <xsd:complexType name="Customer"> <xsd:sequence> <xsd:element name="firstname" type="xsd:string"/> <xsd:element name="surname" type="xsd:string"/> <xsd:element name="County" type="Location"/> </xsd:sequence> </xsd:complexType> </xsd:schema> 错误可能如下所示: 加载[],第10行位置3时发生错误‘http:// myNamespace / DeliveryOrderSchema:LocationDepot’Keyref中的键序列’OverHere’无法引用某个键. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |