XSD 1.1 断言计数和比较元素
XSD 1.1 Assert to Count and Compare Elements
我目前有一个 XSD 文件控制对我相应的 XML 文件的验证等,我想控制(最好使用断言命令而不是 XLST [因为我没有对此的先验知识]) 并能够确保 abc:Country 标签与 abc:AccountNumber 标签的数量相同,因为一个标签应与另一个标签相对应
<abc:Account>
<abc:Individual>
<abc:Country>Germany</abc:Country>
<abc:Country>Australia</abc:Country>
<abs:AccountNumber issuedBy="DE">123456</abs:AccountNumber>
<abs:AccountNumber issuedBy="AU">654321</abs:AccountNumber>
</abc:Individual>
</abc:Account>
有人可以帮我解决我可以用来执行此验证的断言命令吗?
我试过以下方法都无济于事...
<xsd:assert test="if (count (abc:Account/abc:Individual/abc:Country) eq (count (abc:Account/abc:Individual/AccountNumber))) then true() else false() "/>
或者这个....
<xsd:assert test="count (abc:Account/abc:Individual/abc:Country) eq count (abc:Account/abc:Individual/AccountNumber)"/>
我想这可以使用 XSD 1.1?
任何帮助将不胜感激....谢谢
我认为在 abc:Individual
元素的类型定义中包含断言最有意义,那么断言就是:
count(abc:Country) eq count(abc:AccountNumber)
完整的架构是这样的。为简单起见,我将 AccountNumber
保留在 abc
命名空间中,但它可以很容易地替换为其他引用。
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:abc="http://www.example.com/abc"
targetNamespace="http://www.example.com/abc"
xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning"
vc:minVersion="1.1">
<xs:element name="Account">
<xs:complexType>
<xs:sequence>
<xs:element ref="abc:Individual" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Individual">
<xs:complexType>
<xs:sequence>
<xs:element ref="abc:Country" maxOccurs="unbounded" />
<xs:element ref="abc:AccountNumber" maxOccurs="unbounded" />
</xs:sequence>
<xs:assert test="count(abc:Country) eq count(abc:AccountNumber)"/>
</xs:complexType>
</xs:element>
<xs:element name="Country" type="xs:string"/>
<xs:element name="AccountNumber">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="issuedBy" type="xs:string"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:schema>
除了将 abs
更改为 abc
之外,原始文档根据架构成功验证,即:
<?xml version="1.0" encoding="UTF-8"?>
<abc:Account
xmlns:abc="http://www.example.com/abc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.example.com/abc test.xsd">
<abc:Individual>
<abc:Country>Germany</abc:Country>
<abc:Country>Australia</abc:Country>
<abc:AccountNumber issuedBy="DE">123456</abc:AccountNumber>
<abc:AccountNumber issuedBy="AU">654321</abc:AccountNumber>
</abc:Individual>
</abc:Account>
我目前有一个 XSD 文件控制对我相应的 XML 文件的验证等,我想控制(最好使用断言命令而不是 XLST [因为我没有对此的先验知识]) 并能够确保 abc:Country 标签与 abc:AccountNumber 标签的数量相同,因为一个标签应与另一个标签相对应
<abc:Account>
<abc:Individual>
<abc:Country>Germany</abc:Country>
<abc:Country>Australia</abc:Country>
<abs:AccountNumber issuedBy="DE">123456</abs:AccountNumber>
<abs:AccountNumber issuedBy="AU">654321</abs:AccountNumber>
</abc:Individual>
</abc:Account>
有人可以帮我解决我可以用来执行此验证的断言命令吗?
我试过以下方法都无济于事...
<xsd:assert test="if (count (abc:Account/abc:Individual/abc:Country) eq (count (abc:Account/abc:Individual/AccountNumber))) then true() else false() "/>
或者这个....
<xsd:assert test="count (abc:Account/abc:Individual/abc:Country) eq count (abc:Account/abc:Individual/AccountNumber)"/>
我想这可以使用 XSD 1.1?
任何帮助将不胜感激....谢谢
我认为在 abc:Individual
元素的类型定义中包含断言最有意义,那么断言就是:
count(abc:Country) eq count(abc:AccountNumber)
完整的架构是这样的。为简单起见,我将 AccountNumber
保留在 abc
命名空间中,但它可以很容易地替换为其他引用。
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:abc="http://www.example.com/abc"
targetNamespace="http://www.example.com/abc"
xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning"
vc:minVersion="1.1">
<xs:element name="Account">
<xs:complexType>
<xs:sequence>
<xs:element ref="abc:Individual" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Individual">
<xs:complexType>
<xs:sequence>
<xs:element ref="abc:Country" maxOccurs="unbounded" />
<xs:element ref="abc:AccountNumber" maxOccurs="unbounded" />
</xs:sequence>
<xs:assert test="count(abc:Country) eq count(abc:AccountNumber)"/>
</xs:complexType>
</xs:element>
<xs:element name="Country" type="xs:string"/>
<xs:element name="AccountNumber">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="issuedBy" type="xs:string"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:schema>
除了将 abs
更改为 abc
之外,原始文档根据架构成功验证,即:
<?xml version="1.0" encoding="UTF-8"?>
<abc:Account
xmlns:abc="http://www.example.com/abc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.example.com/abc test.xsd">
<abc:Individual>
<abc:Country>Germany</abc:Country>
<abc:Country>Australia</abc:Country>
<abc:AccountNumber issuedBy="DE">123456</abc:AccountNumber>
<abc:AccountNumber issuedBy="AU">654321</abc:AccountNumber>
</abc:Individual>
</abc:Account>