سؤال

وأنا أحاول التفاف رأسي حول مخططات XML وشيء واحد أنا أحاول معرفة هو كيفية القيام المخططات نوع العلائقية حيث يشير على عنصر لآخر، ربما في مخطط آخر تماما. لقد نظرت إلى XSD: مفتاح وXSD: keyref ويبدو أن هذا النوع من الشيء أنا مهتم، ولكن لست متأكدا. في البداية أنا مجرد مجموعة سمات مع XS نوع: XS ID عبد: IDREF، التي من الواضح أنها لا تشير بالضرورة إلى عنصر معين بقدر ما يمكنني أن أقول

والأساس، ولدي العديد من ملفات XML مختلفة حيث تشير العناصر إلى عناصر أخرى إما في نفس الملف أو الملفات الأخرى. يبدو الكثير مثل قاعدة بيانات العلاقة وأحب أن استخدام واحد، ولكن الشرط هو لاستخدام فقط ملفات XML ولذلك أنا على الأقل محاولة تأسيس <م> بعض التعقل بدلا من السلاسل فقط تبدو عشوائية الاعتماد على تعليقات XML لتحديد العلاقات. كان يعمل لمشاريع صغيرة، لكنها بالتأكيد ليست قابلة لل.

وأي أفكار؟

هل كانت مفيدة؟

المحلول

وأنا لست على علم بأي شيء ضمن مخطط XML التي تسمح لك للتحقق من صحة وثائق XML متعددة ضد بعضها البعض. في xs:id وxs:key (الخ) القيود، يمكنك استخدام XPath لتطبيق القيود. يمكنك الذهاب إلى مخطط XML الجزء 1: لمحات عن والتمرير إلى أسفل قليلا عن المثال لمعرفة هذه القيود في العمل.

إذا كان لديك القدرة على تحديد ملف الفوقية XML يتضمن الآخرين بك (ربما عن طريق المراجع كيان لو كان عن طريق أي وسيلة أخرى) ومن ثم استخدام مخطط لهذا الملف الفوقية، ثم عليك أن تكون قادرا على استخدام مخطط XML ل تطبيق القيود الخاصة بك. إذا قمت بتعريف مخطط لكل أنواع الملفات XML الخاصة بك، يجب أن تكون قادرا على مسلي (عن طريق xs:import أو xs:include) تحديد-مخطط الفوقية لملف XML التي تضم كل من محتوى XML الخاصة بك في ملف XML واحد. هذا المخطط الفوقية يمكن بنجاح تطبيق القيود التي تريدها.

ودعونا نقول لديك للتحقق من ويكي يحتوي على العديد من المشاركات، حيث كل وظيفة لها مؤلف وربما الكثير من التعليقات حيث لديها كل تعليق أيضا مؤلف، وأنه لديك ملف XML واحد لجميع الوظائف، واحدة للجميع التعليقات، واحد لجميع الكتاب، وكنت ترغب في التحقق من صحة القيود بين هذه الملفات، أن كل وظيفة يستخدم الكتاب والتعليقات الموجودة، أن كل تعليق يستخدم الباحثون أن وجود لها، وهلم جرا. دعونا نقول لديك الملفات الثلاثة التالية:

وو/home/username/posts.xml الملف:

<?xml version="1.0" encoding="UTF-8" ?>
<posts>
  <post>
    <author name="author1"/>
    <comment id="12345" pos="1"/>
    <comment id="12346" pos="2"/>
    <body>I really like my camera...</body>
  </post>
   ...
</posts>

وو/home/username/comments.xml الملف:

<?xml version="1.0" encoding="UTF-8" ?>
<comments>
  <comment id="12345" author="kindguy">
    That was a very good post
  </comment>
   ...
</comments>

وو/home/username/authors.xml الملف:

<?xml version="1.0" encoding="UTF-8" ?>
<authors>
  <author name="kindguy" id="1"/>
  <author name="author1" id="2"/>
   ...
</authors>

وما أقترحه هو أن جعل لكم ملف الفوقية XML باستخدام الكيان المراجع . على سبيل المثال، يمكنك إنشاء ملف XML التالية:

<?xml version="1.0" encoding="UTF-8" ?>
<!ENTITY postfile    SYSTEM "file:///home/username/posts.xml">
<!ENTITY commentfile SYSTEM "file:///home/username/comments.xml">
<!ENTITY authorfile  SYSTEM "file:///home/username/authors.xml">
<root>
  &postfile1;
  &commentfile;
  &authorfile;
</root>

وهذا الملف الفوقية XML (في الواقع، ملف XML سهل القديمة ... و"الفوقية" هو فقط من وجهة نظر ثلاثة ملفات XML محددة الخاص بك، وليس في أي معنى XML) هي المعادل الدقيق للملف التالية وسوف موزعي XML يتصرف كما لو كان لديك حقا الملف التالي:

<?xml version="1.0" encoding="UTF-8" ?>
<root>
  <posts>
    <post>
      <author name="author1"/>
      <comment id="12345" pos="1"/>
      <comment id="12346" pos="2"/>
      <body>I really like my camera...</body>
    </post>
     ...
  </posts>
  <comments>
    <comment id="12345" author="kindguy">
      That was a very good post
    </comment>
     ...
  </comments>
  <authors>
    <author name="kindguy" id="1"/>
    <author name="author1" id="2"/>
     ...
  </authors>
</root>

ومن على هذه ملف، يمكنك تحديد مخطط XML التي ستطبق القيود المطلوب، على الرغم من أن مع الملفات الفردية لا توجد وسيلة لتطبيق القيود. منذ باستخدام كيان XML تدوين لديك "شملت" كل XML في ملف واحد، يمكنك استخدام XPath في المراجع contraint.

نصائح أخرى

إذا كنت أتذكر بشكل صحيح، xs:ID أن تكون فريدة من نوعها على مستوى العالم ضمن المستند بأكمله، في حين xs:key فما عليه إلا أن تكون فريدة من نوعها للعنصر الذي تم تعريفه. لذلك key/keyref هو في الواقع أشبه PK / FK. PK لا تملك إلا أن تكون فريدة من نوعها ضمن طاولة واحدة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top