C# 向属性和文本块添加范围的xml架构
我是xml模式的新手,我在学校有一个制作棋盘模式的项目。 事情进展顺利。我想我可以用c#来解析它,以确保它都是有效的,但我更希望模式能够抓住这个问题。 这就是问题所在 我有一个xml文档,它将这些片段转换为一个修饰符和一个位置C# 向属性和文本块添加范围的xml架构,c#,xml,xsd,C#,Xml,Xsd,我是xml模式的新手,我在学校有一个制作棋盘模式的项目。 事情进展顺利。我想我可以用c#来解析它,以确保它都是有效的,但我更希望模式能够抓住这个问题。 这就是问题所在 我有一个xml文档,它将这些片段转换为一个修饰符和一个位置 <pieces> <black> <!--Pawns--> <piece modifier="P">17</piece> <piece modifier="P"&
<pieces>
<black>
<!--Pawns-->
<piece modifier="P">17</piece>
<piece modifier="P">27</piece>
<piece modifier="P">37</piece>
<piece modifier="P">47</piece>
<piece modifier="P">57</piece>
<piece modifier="P">67</piece>
<piece modifier="P">77</piece>
<piece modifier="P">87</piece>
<!--Rooks-->
<piece modifier="R">18</piece>
<piece modifier="R">88</piece>
<!--Knights-->
<piece modifier="N">28</piece>
<piece modifier="N">78</piece>
<!--Bishops-->
<piece modifier="B">38</piece>
<piece modifier="B">68</piece>
<!--Royalty-->
<piece modifier="Q">48</piece>
<piece modifier="K">58</piece>
</black>
</pieces>
17
27
37
47
57
67
77
87
18
88
28
78
38
68
48
58
有几件事我想做,但我不知道怎么做,我想验证整数值不低于11,不高于88。这就是我现在拥有的。我看过其他类似主题的堆栈溢出帖子,但找不到有效的
<xs:element name="black">
<xs:complexType>
<xs:sequence>
<xs:element name="piece" minOccurs="0" maxOccurs="16">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:integer">
<xs:attribute name="modifier" type="xs:string"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element><!--End Piece-->
</xs:sequence>
</xs:complexType>
</xs:element><!--End black-->
您必须声明一个新的简单类型,然后应用以该简单类型为基础的扩展 这将是这样的:
<xs:element name="black">
<xs:complexType>
<xs:sequence>
<xs:element name="piece" minOccurs="0" maxOccurs="16">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="BlackModifiedPiece">
<xs:attribute name="modifier" type="xs:string"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:simpleType name="BlackModifiedPiece">
<xs:restriction base="xs:int">
<xs:minInclusive value="11"/>
<xs:maxInclusive value="88"/>
</xs:restriction>
</xs:simpleType>
希望这有帮助;-) 有时候XSD不让你做你想做的事情,这是有原因的。例如,您的值(如67和82)不是真正的整数,因为它们不适用于减法等整数运算。它们实际上是1-8范围内的数字对。因此,您最好使用现代国际象棋符号(“代数符号”)中的标准方式识别棋盘上的方块,例如h1或e5。然后,您可以在XSD中将其描述为受正则表达式限制的字符串
。(当然,您也可以使用限制为“[1-8][1-8]”的字符串,但在我看来,这会令人困惑)
如果你想开始在你的模式中表达国际象棋的语义规则,例如,通过拥有每种颜色的棋子不能超过八个,并且棋子不能在后排的规则,那么你需要开始使用XSD 1.1断言