为伪html编写XML模式
我试图为一些类似HTML的XML编写一个模式。 它有标签,所有标签都在(aragraph)标签内。问题是它们可以是任意顺序:为伪html编写XML模式,xml,xsd,Xml,Xsd,我试图为一些类似HTML的XML编写一个模式。 它有标签,所有标签都在(aragraph)标签内。问题是它们可以是任意顺序: <p> <u><b>test</u><b> </p> <xs:element name="HTMLDocument"> <xs:complexType> <xs:sequence> <xs:element name="p" type=
<p> <u><b>test</u><b> </p>
<xs:element name="HTMLDocument">
<xs:complexType>
<xs:sequence>
<xs:element name="p" type="textElements" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="textElements" mixed="true">
<xs:group>
<xs:element name="b" type="textElements"/>
<xs:element name="i" type="textElements"/>
<xs:element name="u" type="textElements"/>
<xs:element name="a" type="textElements"/>
<xs:element name="font" type="textElements">
<xs:complexType>
<xs:attribute name="size" type="xs:string"/>
<xs:attribute name="face" type="xs:string"/>
<xs:attribute name="color" type="xs:string"/>
</xs:complexType>
</xs:element>
<xs:element name="img">
<xs:complexType>
<xs:attribute name="src" type="xs:string"/>
<xs:attribute name="width" type="xs:decimal"/>
<xs:attribute name="height" type="xs:decimal"/>
</xs:complexType>
</xs:element>
</xs:group>
</xs:complexType>
</xs:schema>
测试
<xs:element name="HTMLDocument">
<xs:complexType>
<xs:sequence>
<xs:element name="p" type="textElements" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="textElements" mixed="true">
<xs:group>
<xs:element name="b" type="textElements"/>
<xs:element name="i" type="textElements"/>
<xs:element name="u" type="textElements"/>
<xs:element name="a" type="textElements"/>
<xs:element name="font" type="textElements">
<xs:complexType>
<xs:attribute name="size" type="xs:string"/>
<xs:attribute name="face" type="xs:string"/>
<xs:attribute name="color" type="xs:string"/>
</xs:complexType>
</xs:element>
<xs:element name="img">
<xs:complexType>
<xs:attribute name="src" type="xs:string"/>
<xs:attribute name="width" type="xs:decimal"/>
<xs:attribute name="height" type="xs:decimal"/>
</xs:complexType>
</xs:element>
</xs:group>
</xs:complexType>
</xs:schema>
或
<xs:element name="HTMLDocument">
<xs:complexType>
<xs:sequence>
<xs:element name="p" type="textElements" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="textElements" mixed="true">
<xs:group>
<xs:element name="b" type="textElements"/>
<xs:element name="i" type="textElements"/>
<xs:element name="u" type="textElements"/>
<xs:element name="a" type="textElements"/>
<xs:element name="font" type="textElements">
<xs:complexType>
<xs:attribute name="size" type="xs:string"/>
<xs:attribute name="face" type="xs:string"/>
<xs:attribute name="color" type="xs:string"/>
</xs:complexType>
</xs:element>
<xs:element name="img">
<xs:complexType>
<xs:attribute name="src" type="xs:string"/>
<xs:attribute name="width" type="xs:decimal"/>
<xs:attribute name="height" type="xs:decimal"/>
</xs:complexType>
</xs:element>
</xs:group>
</xs:complexType>
</xs:schema>
测试。
<xs:element name="HTMLDocument">
<xs:complexType>
<xs:sequence>
<xs:element name="p" type="textElements" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="textElements" mixed="true">
<xs:group>
<xs:element name="b" type="textElements"/>
<xs:element name="i" type="textElements"/>
<xs:element name="u" type="textElements"/>
<xs:element name="a" type="textElements"/>
<xs:element name="font" type="textElements">
<xs:complexType>
<xs:attribute name="size" type="xs:string"/>
<xs:attribute name="face" type="xs:string"/>
<xs:attribute name="color" type="xs:string"/>
</xs:complexType>
</xs:element>
<xs:element name="img">
<xs:complexType>
<xs:attribute name="src" type="xs:string"/>
<xs:attribute name="width" type="xs:decimal"/>
<xs:attribute name="height" type="xs:decimal"/>
</xs:complexType>
</xs:element>
</xs:group>
</xs:complexType>
</xs:schema>
我试图创建一个自引用的复杂类型,但总是出现“无效模式”错误。如果有人能指导我正确的方法,我将不胜感激
<xs:element name="HTMLDocument">
<xs:complexType>
<xs:sequence>
<xs:element name="p" type="textElements" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="textElements" mixed="true">
<xs:group>
<xs:element name="b" type="textElements"/>
<xs:element name="i" type="textElements"/>
<xs:element name="u" type="textElements"/>
<xs:element name="a" type="textElements"/>
<xs:element name="font" type="textElements">
<xs:complexType>
<xs:attribute name="size" type="xs:string"/>
<xs:attribute name="face" type="xs:string"/>
<xs:attribute name="color" type="xs:string"/>
</xs:complexType>
</xs:element>
<xs:element name="img">
<xs:complexType>
<xs:attribute name="src" type="xs:string"/>
<xs:attribute name="width" type="xs:decimal"/>
<xs:attribute name="height" type="xs:decimal"/>
</xs:complexType>
</xs:element>
</xs:group>
</xs:complexType>
</xs:schema>
模式:
<xs:element name="HTMLDocument">
<xs:complexType>
<xs:sequence>
<xs:element name="p" type="textElements" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="textElements" mixed="true">
<xs:group>
<xs:element name="b" type="textElements"/>
<xs:element name="i" type="textElements"/>
<xs:element name="u" type="textElements"/>
<xs:element name="a" type="textElements"/>
<xs:element name="font" type="textElements">
<xs:complexType>
<xs:attribute name="size" type="xs:string"/>
<xs:attribute name="face" type="xs:string"/>
<xs:attribute name="color" type="xs:string"/>
</xs:complexType>
</xs:element>
<xs:element name="img">
<xs:complexType>
<xs:attribute name="src" type="xs:string"/>
<xs:attribute name="width" type="xs:decimal"/>
<xs:attribute name="height" type="xs:decimal"/>
</xs:complexType>
</xs:element>
</xs:group>
</xs:complexType>
</xs:schema>
gaah,诅咒你的XML模式
<xs:element name="HTMLDocument">
<xs:complexType>
<xs:sequence>
<xs:element name="p" type="textElements" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="textElements" mixed="true">
<xs:group>
<xs:element name="b" type="textElements"/>
<xs:element name="i" type="textElements"/>
<xs:element name="u" type="textElements"/>
<xs:element name="a" type="textElements"/>
<xs:element name="font" type="textElements">
<xs:complexType>
<xs:attribute name="size" type="xs:string"/>
<xs:attribute name="face" type="xs:string"/>
<xs:attribute name="color" type="xs:string"/>
</xs:complexType>
</xs:element>
<xs:element name="img">
<xs:complexType>
<xs:attribute name="src" type="xs:string"/>
<xs:attribute name="width" type="xs:decimal"/>
<xs:attribute name="height" type="xs:decimal"/>
</xs:complexType>
</xs:element>
</xs:group>
</xs:complexType>
</xs:schema>
对不起,只是有时候需要把它说出来。我认为这正是您想要的,但一些测试也不会太坏:
<xs:element name="HTMLDocument">
<xs:complexType>
<xs:sequence>
<xs:element name="p" type="textElements" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="textElements" mixed="true">
<xs:group>
<xs:element name="b" type="textElements"/>
<xs:element name="i" type="textElements"/>
<xs:element name="u" type="textElements"/>
<xs:element name="a" type="textElements"/>
<xs:element name="font" type="textElements">
<xs:complexType>
<xs:attribute name="size" type="xs:string"/>
<xs:attribute name="face" type="xs:string"/>
<xs:attribute name="color" type="xs:string"/>
</xs:complexType>
</xs:element>
<xs:element name="img">
<xs:complexType>
<xs:attribute name="src" type="xs:string"/>
<xs:attribute name="width" type="xs:decimal"/>
<xs:attribute name="height" type="xs:decimal"/>
</xs:complexType>
</xs:element>
</xs:group>
</xs:complexType>
</xs:schema>
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="HTMLDocument">
<xs:complexType>
<xs:sequence>
<xs:element name="p" type="textElements" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="textElements" mixed="true">
<xs:group ref="textElementGroup" minOccurs="0" maxOccurs="unbounded"/>
</xs:complexType>
<xs:group name="textElementGroup">
<xs:choice>
<xs:element name="b" type="textElements" minOccurs="0" maxOccurs="1"/>
<xs:element name="i" type="textElements" minOccurs="0" maxOccurs="1"/>
<xs:element name="u" type="textElements" minOccurs="0" maxOccurs="1"/>
<xs:element name="a" type="textElements" minOccurs="0" maxOccurs="1"/>
<xs:element name="font" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:complexContent>
<xs:extension base="textElements">
<xs:attribute name="size" type="xs:string"/>
<xs:attribute name="face" type="xs:string"/>
<xs:attribute name="color" type="xs:string"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="img" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:attribute name="src" type="xs:string"/>
<xs:attribute name="width" type="xs:decimal"/>
<xs:attribute name="height" type="xs:decimal"/>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:group>
</xs:schema>
编辑:哦,看起来你不需要那个额外的xs:sequence。我将把它去掉…一个很好的设计模式是使用抽象元素和替换组。将textElements的内容模型定义为
。将inline
定义为抽象元素。将元素b、i、u等定义在内联的替换组中。将内联的内容模型定义为textElements
<xs:element name="HTMLDocument">
<xs:complexType>
<xs:sequence>
<xs:element name="p" type="textElements" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="textElements" mixed="true">
<xs:group>
<xs:element name="b" type="textElements"/>
<xs:element name="i" type="textElements"/>
<xs:element name="u" type="textElements"/>
<xs:element name="a" type="textElements"/>
<xs:element name="font" type="textElements">
<xs:complexType>
<xs:attribute name="size" type="xs:string"/>
<xs:attribute name="face" type="xs:string"/>
<xs:attribute name="color" type="xs:string"/>
</xs:complexType>
</xs:element>
<xs:element name="img">
<xs:complexType>
<xs:attribute name="src" type="xs:string"/>
<xs:attribute name="width" type="xs:decimal"/>
<xs:attribute name="height" type="xs:decimal"/>
</xs:complexType>
</xs:element>
</xs:group>
</xs:complexType>
</xs:schema>
这种方法的优点是,您(或您的继任者)可以随时向替换组添加新元素,而不会对现有定义产生任何影响。Brilliant,这非常有效。我对xml模式还不熟悉,而且“gaaah”也引起了我的共鸣…@shane我对xml模式并不陌生,但每次它都会让我近乎疯狂。我永远无法理解为什么有些东西会如此反直觉地工作。有时晚上,当我独自一人在办公室时,我会打印出它的规格,然后立即用碎纸机把它撕碎。不管怎样,我想你明白了。@B是的,哦是的。。。我非常喜欢。但Java的支持范围似乎从“实验性”到“5年内未更新”。我有点犹豫不决。但我非常喜欢使用任何其他模式语言……在Java 1.6中,它与W3C XML模式是平等的公民。@b argulies-Hmm,很有趣。但是XML验证API根据合同仅需要支持W3CXML模式,即使标准实现可以这样做,如果我没有弄错的话,RNG对JAXB的支持仍然是实验性的。这是我最大的用例。同样,JAXB使用模式不会像上面那样面临挑战。我主要是用它来为我的懒屁股生成代码。
<xs:element name="HTMLDocument">
<xs:complexType>
<xs:sequence>
<xs:element name="p" type="textElements" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="textElements" mixed="true">
<xs:group>
<xs:element name="b" type="textElements"/>
<xs:element name="i" type="textElements"/>
<xs:element name="u" type="textElements"/>
<xs:element name="a" type="textElements"/>
<xs:element name="font" type="textElements">
<xs:complexType>
<xs:attribute name="size" type="xs:string"/>
<xs:attribute name="face" type="xs:string"/>
<xs:attribute name="color" type="xs:string"/>
</xs:complexType>
</xs:element>
<xs:element name="img">
<xs:complexType>
<xs:attribute name="src" type="xs:string"/>
<xs:attribute name="width" type="xs:decimal"/>
<xs:attribute name="height" type="xs:decimal"/>
</xs:complexType>
</xs:element>
</xs:group>
</xs:complexType>
</xs:schema>