【发布时间】:2016-12-10 14:30:57
【问题描述】:
你好,
过去 2 天我一直在研究 XSD 规范和示例 此 XSD 将验证的 XML 代码。但是,我拥有的 XSD created 不会验证 XML,因此我有来自 关于错误的命令行,我无法确定确切的 原因。
如果有人能帮我解决这个问题,我将不胜感激。
XML 如下所示:
<?xml version="1.0" encoding="UTF-8"?> <peopleCatalogue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="zoznam-osoby.xsd"> <person role="boss" typeOfContact="humanBeing"> <firstName>Anton</firstName> <lastName>Mlaskal</lastName> <email typeOfEmail="personal">mlaskalko.antonko@hotmail.com</email> <email typeOfEmail="professional">mlaskal.anton@gmail.com</email> <phoneNumber typeOfPhone="cell">+421 948 127 337</phoneNumber> <phoneNumber typeOfPhone="home">+420 2 48 48 48</phoneNumber> <web>www.mlaskal.com</web> <adress> <streetName>Lubovnikova</streetName> <houseNumber>7</houseNumber> <postalCode>84107</postalCode> <cityName>Bratislava</cityName> <country>Slovakia</country> </adress> <note typeOfNote="action">Please, kill him as soon as possible.</note> <note typeOfNote="undercoverInformation">He is the boss of the whole drug cartel we need to eradicate.</note> </person> <person role="boss" typeOfContact="IDServicePair"> <service>Skype</service> <ID>Antonius</ID> </person> </peopleCatalogue>XSD 如下所示:
<?xml version="1.0" encoding="UTF-8"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:element name="peopleCatalogue"> <xsd:complexType> <xsd:all> <xsd:element name="person"> <xsd:complexType> <xsd:attribute name="role" type="xsd:string" default="unknown"/> <xsd:attribute name="typeOfContact"> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:pattern value="humanBeing|IDServicePair"/> </xsd:restriction> </xsd:simpleType> </xsd:attribute> </xsd:complexType> </xsd:element> </xsd:all> </xsd:complexType> </xsd:element> <xsd:complexType name="IDServicePair"> <xsd:all> <xsd:element name="ID" minOccurs="1" maxOccurs="1"> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:pattern value="([a-zA-Z0-9 ])*"/> </xsd:restriction> </xsd:simpleType> </xsd:element> <xsd:element name="service" minOccurs="1" maxOccurs="1"> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:pattern value="([a-zA-Z0-9 ~!@#$%^*])*"/> </xsd:restriction> </xsd:simpleType> </xsd:element> </xsd:all> </xsd:complexType> <xsd:element name="humanBeing"> <xsd:complexType> <xsd:all> <xsd:element name="firstName" minOccurs="1" maxOccurs="1"> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:pattern value="([a-zA-Z])*"/> </xsd:restriction> </xsd:simpleType> </xsd:element> <xsd:element name="lastName" minOccurs="1" maxOccurs="1"> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:pattern value="([a-zA-Z])*"/> </xsd:restriction> </xsd:simpleType> </xsd:element> <xsd:element name="email"> <xsd:complexType> <xsd:simpleContent> <xsd:extension base="emailPattern"> <xsd:attribute name="typeOfEmail" default="personal"/> </xsd:extension> </xsd:simpleContent> </xsd:complexType> </xsd:element> <xsd:element name="phoneNumber"> <xsd:complexType> <xsd:simpleContent> <xsd:extension base="phonePattern"> <xsd:attribute name="typeOfPhone" default="cell"/> </xsd:extension> </xsd:simpleContent> </xsd:complexType> </xsd:element> <xsd:element name="web"> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:pattern value="(https?://[a-zA-Z]+(\.[a-zA-Z]+)*\.[a-zA-Z]{2,9})|(www(\.[a-zA-Z]+)+((\.[a-zA-Z]{2,9}){1}))"/> </xsd:restriction> </xsd:simpleType> </xsd:element> <xsd:element name="adress"> <xsd:complexType> <xsd:all> <xsd:element name="streetName"> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:pattern value="([a-zA-Z ])*"/> </xsd:restriction> </xsd:simpleType> </xsd:element> <xsd:element name="houseNumber"> <xsd:simpleType> <xsd:restriction base="xsd:integer"> <xsd:pattern value="([0-9])*"/> <xsd:minInclusive value="0"/> <xsd:maxInclusive value="99999"/> </xsd:restriction> </xsd:simpleType> </xsd:element> <xsd:element name="postalCode"> <xsd:simpleType> <xsd:restriction base="xsd:integer"> <xsd:pattern value="([0-9])*"/> <xsd:minInclusive value="0"/> <xsd:maxInclusive value="99999"/> </xsd:restriction> </xsd:simpleType> </xsd:element> <xsd:element name="cityName"> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:pattern value="([a-zA-Z ])*"/> </xsd:restriction> </xsd:simpleType> </xsd:element> <xsd:element name="country"> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:pattern value="([a-zA-Z ])*"/> </xsd:restriction> </xsd:simpleType> </xsd:element> </xsd:all> </xsd:complexType> </xsd:element> <xsd:element name="note"> <xsd:complexType> <xsd:simpleContent> <xsd:extension base="noteType"> <xsd:attribute name="typeOfNote"/> </xsd:extension> </xsd:simpleContent> </xsd:complexType> </xsd:element> </xsd:all> </xsd:complexType> </xsd:element>
当我尝试使用 xsd 验证 xml 文件时收到的错误消息 通过
xmllint --noout --schema zoznam-osoby.xsd OnePerson.xml in command line is this: OnePerson.xml:3: element person: Schemas validity error : Element 'person': Character content is not allowed, because the content type is empty. OnePerson.xml:3: element person: Schemas validity error : Element 'person': Element content is not allowed, because the content type is empty. OnePerson.xml:22: element person: Schemas validity error : Element 'person': This element is not expected. OnePerson.xml fails to validate它告诉我,内容类型为空,但我不知道,什么 这是关于什么的内容。怎样做才能让它发挥作用?
【问题讨论】:
-
您的架构和您的问题表明您对 XML 架构的理解存在相当大的差距。建议你先学习相关的学习资料,比如Definitive XML Schema,或者W3C的XML Schema Primer。
-
能否请您简要说明一下?
-
好吧,错误信息已经告诉了你需要知道的一切。在 schema 中,
person被声明为一个内容为空的元素,这意味着它不能包含其他元素。 -
我正在寻找我已将其声明为内容为空的元素的行,但我找不到答案。这就是为什么我要求任何愿意为我指明正确方向的人。
-
如我所说,你应该学习相关的学习资料。然后你就会知道一个内容为空的元素被简单地声明为by not including any content in its declaration。