0

トポロジ表現を使用して線を定義する方法を見つける必要があります。今、私はそれに似たものを持っています:

<?xml version="1.0" encoding="UTF-8"?>
<Root>
    <Points>
        <Point>
            <UIDP>1</UIDP>
            <X>5379847.689</X>
            <Y>1223602.644</Y>
            <MX>0.05</MX>
            <MY>0.05</MY>
        </Point>
        <Point>
            <UIDP>2</UIDP>
            <X>5379828.473</X>
            <Y>1223606.113</Y>
            <MX>0.05</MX>
            <MY>0.05</MY>
        </Point>
    </Points>
    <Lines>
        <Line>
            <Point>1</Point>/>
            <Point>2</Point>/>
        </Line>
    </Lines>  
</Root>

Line/Point は、ポイントの一意の ID (UIDP) の値です。

質問

  1. IDだけでなく、参照などを使用して穴のポイントの定義を取得する、より明確にする方法はありますか?
  2. XLink または XPointer を使用して作成する方法は?
  3. XSD スキーマ 1.1 でそれを定義する方法は?
4

2 に答える 2

0

XLink や XPointer で作成する方法はわかりませんでしたが、XSD を介してルールの一部を定義する方法はわかりました。

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning" vc:minVersion="1.1">

    <xsd:complexType name="point">
        <xsd:sequence>
            <xsd:element name="UIDP" type="xsd:integer"/>
            <xsd:element name="X" type="xsd:float"/>
            <xsd:element name="Y" type="xsd:float"/>
            <xsd:element name="MX" type="xsd:float"/>
            <xsd:element name="MY" type="xsd:float"/>
        </xsd:sequence>
    </xsd:complexType>

    <xsd:complexType name="line">
        <xsd:sequence>
            <xsd:element name="Point1" type="xsd:integer"/>
            <xsd:element name="Point2" type="xsd:integer"/>
        </xsd:sequence>
        <xsd:assert test="Point1 != Point2"/>
    </xsd:complexType>

    <xsd:element name="Root">
        <xsd:complexType>
            <xsd:sequence>

                <xsd:element name="Points">
                    <xsd:complexType>
                        <xsd:sequence>
                            <xsd:element name="Point" type="point" maxOccurs="unbounded"/>
                        </xsd:sequence>
                    </xsd:complexType>
                </xsd:element>

                <xsd:element name="Lines">
                    <xsd:complexType>
                        <xsd:sequence>
                            <xsd:element name="Line" type="line" maxOccurs="unbounded"/>      
                        </xsd:sequence>
                    </xsd:complexType>

                    <xsd:unique name="lines_unique">
                        <xsd:selector xpath="Line"/>
                        <xsd:field xpath="Point1"/>
                        <xsd:field xpath="Point2"/>
                    </xsd:unique>

                </xsd:element>
            </xsd:sequence>
        </xsd:complexType>

        <xsd:key name="point_uidp">
            <xsd:selector xpath="Points/Point"></xsd:selector>
            <xsd:field xpath="UIDP"></xsd:field>
        </xsd:key>

        <xsd:keyref refer="point_uidp" name="point_1">
            <xsd:selector xpath="Lines/Line/Point1"></xsd:selector>
            <xsd:field xpath="."></xsd:field>
        </xsd:keyref>

        <xsd:keyref refer="point_uidp" name="point_2">
            <xsd:selector xpath="Lines/Line/Point2"></xsd:selector>
            <xsd:field xpath="."></xsd:field>
        </xsd:keyref>

    </xsd:element>

</xsd:schema>

スキーマによって定義されたルール:

  1. すべてのポイント ID は一意である必要があり、表示される必要があり、NULL にすることはできません
  2. すべてのライン ポイント リンクは、ポイント ID の範囲からのものである必要があります
  3. ライン ポイント リンクは一意である必要があり、他のラインで複製することはできません
于 2016-06-28T09:40:11.113 に答える
0

.NETDataSetクラスは次のスキーマを自動生成します (わかりやすくするために空白行を追加しました)。

<?xml version="1.0" standalone="yes"?>
<Root>
  <xs:schema id="Root" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema"
             xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">

    <xs:element name="Root" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
      <xs:complexType>
        <xs:choice minOccurs="0" maxOccurs="unbounded">

          <xs:element name="Point">
            <xs:complexType>
              <xs:sequence>
                <xs:element name="UIDP" type="xs:int" />
                <xs:element name="X" type="xs:double" minOccurs="0" />
                <xs:element name="Y" type="xs:double" minOccurs="0" />
                <xs:element name="MX" type="xs:double" minOccurs="0" />
                <xs:element name="MY" type="xs:double" minOccurs="0" />
              </xs:sequence>
            </xs:complexType>
          </xs:element>

          <xs:element name="Line">
            <xs:complexType>
              <xs:sequence>
                <xs:element name="Point1" type="xs:int" />
                <xs:element name="Point2" type="xs:int" />
              </xs:sequence>
            </xs:complexType>
          </xs:element>

        </xs:choice>
      </xs:complexType>

      <xs:unique name="PK_Points" msdata:PrimaryKey="true">
        <xs:selector xpath=".//Point" />
        <xs:field xpath="UIDP" />
      </xs:unique>

      <xs:unique name="PK_Lines" msdata:PrimaryKey="true">
        <xs:selector xpath=".//Line" />
        <xs:field xpath="Point1" />
        <xs:field xpath="Point2" />
      </xs:unique>

      <xs:keyref name="FK_Lines2" refer="PK_Points" msdata:ConstraintOnly="true">
        <xs:selector xpath=".//Line" />
        <xs:field xpath="Point2" />
      </xs:keyref>

      <xs:keyref name="FK_Lines1" refer="PK_Points" msdata:ConstraintOnly="true">
        <xs:selector xpath=".//Line" />
        <xs:field xpath="Point1" />
      </xs:keyref>

    </xs:element>
  </xs:schema>

  <Point>
    <UIDP>1</UIDP>
    <X>5379847.689</X>
    <Y>1223602.644</Y>
    <MX>0.05</MX>
    <MY>0.05</MY>
  </Point>
  <Point>
    <UIDP>2</UIDP>
    <X>5379828.473</X>
    <Y>1223606.113</Y>
    <MX>0.05</MX>
    <MY>0.05</MY>
  </Point>

  <Line>
    <Point1>1</Point1>
    <Point2>2</Point2>
  </Line>
</Root>

スキームは、データとともに単一のファイルに生成されます。

PointsandLines要素がないことに注意してください。

残念ながら、バージョン 1.0 のスキーマです。したがって、より高度なチェックは利用できません。

プレフィックスを持つ属性はmsdata削除できます。

于 2016-06-29T12:36:22.720 に答える